package com.sumainfor.pc.epc.controller.buyer;

import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.sumainfor.common.util.FieldCheckUtil;
import com.sumainfor.common.util.JsonResult;
import com.sumainfor.common.util.ShopTypeSelectUtil;
import com.sumainfor.pc.epc.service.StockManageService;
import lombok.extern.log4j.Log4j2;
import org.apache.commons.collections.MapUtils;
import org.apache.commons.lang.StringUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;

import java.util.List;
import java.util.Map;
import java.util.Objects;

/**
 * @Author PuaChen
 * @Create 2018-11-21 18:36
 */
@RestController
@Log4j2
@RequestMapping("/stock/manage")
public class StockManageController {

    @Autowired
    private StockManageService stm;

    /**
     * 获取下拉列表筛选条件 -> 领用人
     *
     * @return
     */
    @RequestMapping("/getSelectComponentData")
    public JsonResult getSelectComponentData() {
        return stm.getSelectComponentData();
    }

    /**
     * 获取备件领用单的列表数据
     *
     * @param page   分页
     * @param params 筛选条件
     *               参数:
     *               userId: 用户进行筛选
     *               type： 类型
     *               state：状态 是否被领取
     *               recId: 领用单的编号
     * @return
     */
    @RequestMapping("/getStockDataList")
    public JsonResult getStockDataList(Page page, @RequestParam Map<String, Object> params) {
        return stm.getStockDataList(page, params);
    }


    /**
     * 获得 领用单出库操作的 基本商品数据
     *
     * @param stockId
     * @return
     */
    @RequestMapping("/getStockActionInfo")
    public JsonResult getStockActionInfo(String stockId) {
        if (StringUtils.isBlank(stockId)) {
            return JsonResult.error("参数错误");
        }
        return stm.getStockActionInfo(stockId);
    }

    /**
     * 备件领用单的出库操作
     *
     * @param dataList
     * @return
     */
    @PostMapping("/outStockShopAction")
    public JsonResult outStockShopAction(@RequestBody List<Map<String, Object>> dataList) {
        if (dataList == null || dataList.isEmpty()) {
            return JsonResult.error("参数错误");
        }
        return stm.outStockShopAction(dataList);
    }


    /**
     * 获取备件库存列表上筛选条件的数据
     *
     * @return data:{
     * sort:{},
     * shopName:{},
     * brandName:{}
     * }
     */
    @RequestMapping("/getStockStoreListHeadType")
    public JsonResult getStockStoreListHeadType() {
        return stm.getStockStoreListHeadType();
    }

    /**
     * 获取备件库存列表数据
     *
     * @param params sort 大类别 1|2
     *               shopName 商品名称
     *               brandName 商品的品牌
     * @return
     */
    @RequestMapping("/getStockStoreList")
    public JsonResult getStockStoreList(Page page, @RequestParam Map<String, Object> params) {
        return stm.getStockStoreList(page, params);
    }

    /**
     * 停用或者 开启一个 型号商品
     *
     * @param moId
     * @param state 状态 0 或者 1
     * @return
     */
    @PostMapping("/setDisableOrEnableForMo")
    public JsonResult setDisableOrEnableForMo(String moId, Integer state) {
        if (StringUtils.isBlank(moId)) {
            return JsonResult.error("请提供型号编号");
        }
        if (state == null || (state != 0 && state != 1)) {
            return JsonResult.error("状态错误");
        }
        return stm.setDisableOrEnableForMo(moId, state);
    }


    /**
     * 修改 商品型号的基本信息
     *
     * @param params
     * @return
     */
    @PostMapping("/updateStockForMo")
    public JsonResult updateStockForMo(@RequestBody Map<String, Object> params) {
        String[] field = {"ComSpeMoId", "ComSpeMoName", "Monad", "Warranty"};
        if (!FieldCheckUtil.isMapFieldNotNull(params, field)) {
            return JsonResult.error("参数错误");
        }
        return stm.updateStockForMo(params);
    }

    /**
     * 获得 这个 商品型号的基本信息详情
     *
     * @param moId
     * @return
     */
    @RequestMapping("/getShopForMoInfo")
    public JsonResult getShopForMoInfo(String moId) {
        if (StringUtils.isBlank(moId)) {
            return JsonResult.error("参数错误");
        }
        return stm.getShopForMoInfo(moId);
    }

    /**
     * 获得备件详情中的出入库记录信息
     * 入库 参数：
     * type: (2)，
     * supId： 供应商的ID
     * date：时间long
     * moId:型号的id
     * ---
     * 出库 参数
     * type: (1)，
     * userId： 用户的ID
     * date：时间long
     * moId:型号的id
     *
     * @param params
     * @return
     */
    @RequestMapping("/getShopMoForOutOrInLogs")
    public JsonResult getShopMoForOutOrInLogs(Page page, @RequestParam Map<String, Object> params) {
        String[] filed = {"type"};
        if (!FieldCheckUtil.isMapFieldNotNull(params, filed)) {
            return JsonResult.error("参数错误");
        }
        return stm.getShopMoForOutOrInLogs(page, params);
    }


    /**
     * 获得备件详情出入库记录 领用人筛选条件接口
     * data:[
     * {
     * name:"张三",
     * id:1
     * }
     * ]
     *
     * @param moId
     * @param type 1 是获得领用人 2 是获得供应商的
     * @return
     */
    @RequestMapping("/getShopMoForOutOrInGotoTypeData")
    public JsonResult getShopMoForOutOrInGotoTypeData(String moId, String type) {
        if ((!Objects.equals(type, "1") && !Objects.equals(type, "2"))) {
            return JsonResult.error("参数错误");
        }
        return stm.getShopMoForOutOrInGotoTypeData(moId, type);
    }

    ///////////////////////////////////////////////////////////////////////////
    // 商品的
    ///////////////////////////////////////////////////////////////////////////

    /**
     * 返回添加商品的时候 初始化下拉框的数据
     * -- 所属类型
     *
     * @return
     */
    @RequestMapping("/getInitSelectComponentDataForShopType")
    public JsonResult getInitSelectComponentDataForShopType() {
        return stm.getInitSelectComponentDataForShopType();
    }

    /**
     * 返回添加商品的时候 初始化下拉框的数据
     * -- 根据所属类型返回商品的名称
     *
     * @return
     */
    @RequestMapping("/getInitSelectComponentDataForShopNames")
    public JsonResult getInitSelectComponentDataForShopNames(String typeId, Boolean isIcon) {
        if (StringUtils.isBlank(typeId)) {
            return JsonResult.error("参数错误");
        }
        return stm.getInitSelectComponentDataForShopNames(typeId, isIcon);
    }


    /**
     * 返回添加商品的时候 初始化下拉框的数据
     * -- 根据商品的名称返回商品的品牌
     *
     * @return
     */
    @RequestMapping("/getInitSelectComponentDataForShopBrand")
    public JsonResult getInitSelectComponentDataForShopBrand(String shopName) {
        if (StringUtils.isBlank(shopName)) {
            return JsonResult.error("参数错误");
        }
        return stm.getInitSelectComponentDataForShopBrand(shopName);
    }

    /**
     * 返回添加商品的时候 初始化下拉框的数据
     * -- 根据商品的编号返回这个商品所有的规格名称和编号
     *
     * @return
     */
    @RequestMapping("/getInitSelectComponentDataForSpe")
    public JsonResult getInitSelectComponentDataForSpe(String shopId) {
        if (StringUtils.isBlank(shopId)) {
            return JsonResult.error("参数错误");
        }
        return stm.getInitSelectComponentDataForSpe(shopId);
    }


    /**
     * 返回添加商品的时候 初始化下拉框的数据
     * -- 根据商品规格编号返回这个规格的所有对应的型号
     *
     * @return
     */
    @RequestMapping("/getInitSelectComponentDataForMo")
    public JsonResult getInitSelectComponentDataForMo(String speId) {
        if (StringUtils.isBlank(speId)) {
            return JsonResult.error("参数错误");
        }
        return stm.getInitSelectComponentDataForMo(speId);
    }


    /**
     * 返回添加商品的时候 初始化下拉框的数据
     * -- 返回这个商品的所有的单位
     *
     * @return
     */
    @RequestMapping("/getInitSelectComponentDataForUnit")
    public JsonResult getInitSelectComponentDataForUnit(String speId) {
        return stm.getInitSelectComponentDataForUnit(speId);
    }


    /**
     * 返回添加商品的时候 初始化下拉框的数据
     * -- 根据供应商的类型 返回所有供应商的编号和名称
     *
     * @return
     */
    @RequestMapping("/getInitSelectComponentDataForSup")
    public JsonResult getInitSelectComponentDataForSup(String supType) {
        return stm.getInitSelectComponentDataForSup(supType);
    }


    /**
     * 新增商品进行的接口
     *
     * @param params
     * @return
     */
    @PostMapping("/insertShopInfo")
    public JsonResult insertShopInfo(@RequestBody Map<String, Object> params) {
        if (!FieldCheckUtil.isMapFieldNotNull(params, "type")) {
            return JsonResult.error("请提供类型");
        }
        if (ShopTypeSelectUtil.isActivity(MapUtils.getString(params, "type"))) {
            String[] fls = {"price", "errorCount", "supList", "ComSpeMoName",
                    "Monad", "Warranty"};
            if (!FieldCheckUtil.isMapFieldNotNull(params, fls)) {
                return JsonResult.error("请提供必须的参数");
            }
        } else {
            if (!FieldCheckUtil.isMapFieldNotNull(params, "ComName", "price")) {
                return JsonResult.error("请提供必须的参数");
            }
        }

        return stm.insertShopInfo(params);
    }


    ///////////////////////////////////////////////////////////////////////////
    // 单个备件出库和入库的操作
    ///////////////////////////////////////////////////////////////////////////

    /**
     * 单个备件的出库的操作
     *
     * @param params
     * @return
     */
    @PostMapping("/signOutputForStock")
    public JsonResult signOutputForStock(@RequestBody Map<String, Object> params) {
        String[] field = {"moId", "supId", "count", "userId"};
        if (!FieldCheckUtil.isMapFieldNotNull(params, field)) {
            return JsonResult.error("参数错误");
        }
        return stm.signOutputForStock(params);
    }

    /**
     * 获得出库操作 领用人的信息数据
     *
     * @return
     */
    @RequestMapping("/getStocketOutPeopleDataList")
    public JsonResult getStocketOutPeopleDataList() {
        return stm.getStocketOutPeopleDataList();
    }

    /**
     * 单个备件的入库的操作
     *
     * @param params
     * @return
     */
    @PostMapping("/signInputForStock")
    public JsonResult signInputForStock(@RequestBody Map<String, Object> params) {
        String[] field = {"supId", "moId", "count"};
        if (!FieldCheckUtil.isMapFieldNotNull(params, field)) {
            return JsonResult.error("参数错误");
        }
        return stm.signInputForStock(params);
    }

}
